package com.xuxueli.commontdemo.util;

import io.netty.buffer.Unpooled;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class TestGbt920 {

    public static void main(String[] args) {
        TestGbt920 testGbt920 = new TestGbt920();
        String strByte = "232301FE393031323835303730303030303030303001001E160C0F0B061B000438393836303242363033313730303230313830340100A5";
//        String byte2temperature = testGbt920.byte2temperature(strByte);
//        System.out.println(byte2temperature);
        byte[] bytes = HexUtils.fromHexString(strByte);
        String string = HexUtils.toHexString(bytes);
        GBT32960Decoder gbt32960Decoder = new GBT32960Decoder();
        List<Object> list = new ArrayList<>();
        gbt32960Decoder.decode(null, Unpooled.copiedBuffer(bytes),list);
        System.out.println(string);

    }

    /**
     * 驱动电机控制器温度 & 驱动电机温度
     * @param strByte
     * @return
     */
    private String byte2temperature(String strByte) {
        if(strByte.equals("FE")) {
            return "异常";
        } else if(strByte.equals("FF")) {
            return "无效";
        }
        // 排除以上两种情况后，就可以直接当做数字处理
        BigDecimal BdByte = new BigDecimal(Integer.valueOf(strByte, 16));
        // 偏移量40℃，有效范围值：-40℃~210℃
        BdByte = BdByte.subtract(new BigDecimal(40));
        return BdByte.toString();
    }
    /**
     * 驱动电机转速
     * @param strByte
     * @return
     */
    private String byte2revs(String strByte) {
        if(strByte.equals("FFFE")) {
            return "异常";
        } else if(strByte.equals("FFFF")) {
            return "无效";
        }
        // 排除以上两种情况后，就可以直接当做数字处理
        BigDecimal BdByte = new BigDecimal(Integer.valueOf(strByte, 16));
        // 偏移量20000r/min，有效范围值：-20000r/min~45531r/min
        BdByte = BdByte.subtract(new BigDecimal(20000));
        return BdByte.toString();
    }
    /**
     * 驱动电机转矩
     * @param strByte
     * @return
     */
    private String byte2torque(String strByte) {
        if(strByte.equals("FFFE")) {
            return "异常";
        } else if(strByte.equals("FFFF")) {
            return "无效";
        }
        // 排除以上两种情况后，就可以直接当做数字处理
        BigDecimal BdByte = new BigDecimal(Integer.valueOf(strByte, 16));
        // 精确到0.1N.m，所以在这里除以10
        BdByte = BdByte.divide(new BigDecimal(10));
        // 偏移量2000N.m，有效范围值：-2000N.m~4553.1N.m
        BdByte = BdByte.subtract(new BigDecimal(2000));
        return BdByte.toString();
    }
    /**
     * 驱动电机控制器输入电压
     * @param strByte
     * @return
     */
    private String byte2inputVoltage(String strByte) {
        if(strByte.equals("FFFE")) {
            return "异常";
        } else if(strByte.equals("FFFF")) {
            return "无效";
        }
        // 排除以上两种情况后，就可以直接当做数字处理
        BigDecimal BdByte = new BigDecimal(Integer.valueOf(strByte, 16));
        // 精确到0.1V，所以在这里除以10
        BdByte = BdByte.divide(new BigDecimal(10));
        return BdByte.toString();
    }
    /**
     * 驱动电机控制器直流母线电流
     * @param strByte
     * @return
     */
    private String byte2DCBusCurrent(String strByte) {
        if(strByte.equals("FFFE")) {
            return "异常";
        } else if(strByte.equals("FFFF")) {
            return "无效";
        }
        // 排除以上两种情况后，就可以直接当做数字处理
        BigDecimal BdByte = new BigDecimal(Integer.valueOf(strByte, 16));
        // 精确到0.1A，所以在这里除以10
        BdByte = BdByte.divide(new BigDecimal(10));
        // 偏移量1000A，有效范围值：-1000A~1000A
        BdByte = BdByte.subtract(new BigDecimal(1000));
        return BdByte.toString();
    }

}
